#include "Date.h"

Date::Date(int year, int month, int day)
{
	_year = year;
	_month = month;
	_day = day;
}

Date::~Date()
{
	_year == 0;
	_month == 0;
	_day == 0;
}

bool Date::operator==(Date& d)
	{
		return _year == d._year
			&& _month == d._month
			&& _day == d._day;
	}

bool Date::operator>(Date& d)
	{
		if (_year > d._year)
		{
			return true;
		}
		else if (_year == d._year)
		{
			if (_month > d._month)
				return true;
			else if (_month == d._month)
			{
				if (_day > d._day)
					return true;
			}
		}
		return false;
	}

bool Date::operator>=(Date& d)
{
	return (operator>(d) || operator==(d));
}

	bool Date::operator<(Date& d)
	{
		return !(operator==(d) || operator>(d));
	}

	bool Date::operator<=(Date& d)
	{
		return !operator>(d);
	}

	Date Date::operator+=(int x)
	{
		_day += x;
		while (_day > GetMonthDay(_year, _month))
		{
			_day -= GetMonthDay(_year, _month);
			_month++;
			if (_month > 12)
			{
				_month = 1;
				_year++;
			}
		}
		return *this;
	}

	Date Date::operator+(int x)
	{
		Date temp = *this;
		temp += x;
		return temp;
	}


	Date Date::operator-=(int x)
	{
		_day -= x;
		while (_day <= 0)
		{
			_day += GetMonthDay(_year, _month - 1);
			_month--;
			if (_month < 1)
			{
				_month = 12;
				_year--;
			}
		}
		return *this;
	}

	Date Date::operator-(int x)
	{
		Date temp = *this;
		temp -= x;
		return temp;
	}

	int Date::operator-(Date& d2)
	{
		Date max = *this;
		Date min = d2;
		int flag = 1;
		int count = 0;
		if (min > max)
		{
			min = *this;
			max = d2;
			flag = -1;
		}
		while (min < max)
		{
			min += 1;
			count++;
		}
		return flag * count;
	}

Date Date::operator++(int)
{
	Date temp = *this;
	temp += 1;
	return *this;
}

Date Date::operator++()
{
	*this += 1;
	return *this;
}

Date Date::operator--(int)
{
	Date temp = *this;
	temp -= 1;
	return *this;
}

Date Date::operator--()
{
	*this -= 1;
	return *this;
}

bool Date::operator!=(Date& d)
{
	return !(operator==(d));
}




